package prototype.android.paradox;

import java.math.BigDecimal;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ProtoAppli1_ParadoxActivity extends Activity {
	// 最後に求める確率代入用変数を定義
	BigDecimal answer;
	BigDecimal answerone;
	BigDecimal answerhyaku;


	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.birthday);

		// ボタンオブジェクト取得
		Button button = (Button) findViewById(R.id.button);

		// ボタンオブジェクトをクリックリスナーに設定
		button.setOnClickListener(new ButtonClickListener());
	}

	// クリックリスナー定義
	class ButtonClickListener implements OnClickListener {
		// onClickメソッド
		public void onClick(View v) {
			// テキストボックスの入力情報取得
			EditText people = (EditText) findViewById(R.id.people);

			// 確率を計算
			// 365の階乗を求める
			BigDecimal a = new BigDecimal("1");
			BigDecimal u = new BigDecimal("0");
			for (int i = 1; i <= 365; i++) {
				u = u.add(new BigDecimal("1"));
				a = a.multiply(u);
			}

			// (365-p)の階乗
			int n;
			String str = people.getText().toString();
			// BigDecimal z = new BigDecimal(str);
			// n = z.subtract(new BigDecimal("365"));
			int z = Integer.parseInt(str);
			n = 365 - z;
			BigDecimal b = new BigDecimal("1");
			BigDecimal t = new BigDecimal("0");
			for (int i = 1; i <= n; i++) {
				t = t.add(new BigDecimal("1"));
				b = b.multiply(t);
			}

			// 365のn乗
			BigDecimal c = new BigDecimal("365");
			String e = "365";
			//String q = String.valueOf(n);

			for (int i = 1; i <= n-1; i++) {
				c = c.multiply(new BigDecimal(e));
			}

			// 変数abcを用いてanswerに答えを代入

			// answer = 1 - b/a*c;
			//エラーを防ぐために変数answerは小数第十桁までをもとめるようにしてある。
			
			try {
			BigDecimal one = new BigDecimal("1");
			answer = b.divide(a.multiply(c), 10, BigDecimal.ROUND_DOWN );
			answerone = one.subtract(answer);

			BigDecimal hundred = new BigDecimal("100");
			answerhyaku = answerone.multiply(hundred);
			
			}catch (ArithmeticException math){
				Toast.makeText(ProtoAppli1_ParadoxActivity.this, "不正な値が入力されました", Toast.LENGTH_SHORT).show();
				return;
			}
			
			

			showDialog(0);

		}

		// ダイアログを表示
		public void showDialog(int id) {
			AlertDialog.Builder dialog = new AlertDialog.Builder(
					ProtoAppli1_ParadoxActivity.this);
			dialog.setTitle("計算結果");
			dialog.setMessage("確率は" + answer.toString() + "%です。");
			dialog.setPositiveButton("OK",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog,
								int whichButton) {
							ProtoAppli1_ParadoxActivity.this
									.setResult(Activity.RESULT_OK);
						}

					});
			dialog.show();
		}
	}
}